iT邦幫忙

2024 iThome 鐵人賽

DAY 2
0
Python

Python x OpenCV系列 第 2

[Day 02] 色彩模式與顏色偵測

  • 分享至 

  • xImage
  •  

今天會帶你走進顏色與圖片的世界,介紹顏色的分法種類與圖片的構成基本元素。

圖片構成元素

像素 (Pixel)

我們所看到的每一張圖片都是由一個一個小方格所構成,由於這些方格非常小,因此我們肉眼可能看到的是連續的顏色變化,但實際上每個方格都只有單一顏色。也就是說,實際上圖片是由一個一個非連續的小方格構成,像是馬賽克拼貼一樣。

一個小方格我們稱為一個像素,是構成數位圖片最小的單位,每個像素的顏色由本身的顏色通道值所決定。通常一個像素有1~4個通道,通道數量取決於選擇的色彩模式。

色彩模式

灰階 (Grayscale)

在灰階圖片裡,每個像素只有一個通道,量值為0~255。0代表黑色,255代表白色,中間值代表依比例混合黑色與白色,也就構成了深淺不同的像素。
lenna.jpg
https://ithelp.ithome.com.tw/upload/images/20240916/20168060exTI1Hj0XC.png

RGB

每個像素由3個通道組成,分別為紅色(Red)、綠色(Green)、藍色(Blue),每個通道皆是0~255的值。以紅色通道為例,0代表黑色,255代表純紅色,另外兩個通道也是依此類推,值愈大代表強度愈強。當三個通道疊在一起時,將會出現我們人類肉眼看到的彩色圖片。
https://ithelp.ithome.com.tw/upload/images/20240916/20168060qdiTXytn7n.jpg
https://ithelp.ithome.com.tw/upload/images/20240916/201680606uk9fW8glM.png

BGR

OpenCV中使用的預設顏色模式,原理與RGB類似,只是疊起來的順序不同。BGR從上到下為藍色、綠色、紅色。

RGBA/BGRA

在 RGB 或 BGR 基礎上增加了一個 Alpha (A)通道,用於表示透明度。A值為0時表示透明度為0,與正常照片一樣;A值為255時,表示全透明,完全看不到圖片。

HSV

基於實際應用層面,有些時候我們可能需要抓取特定顏色範圍內的物體,此時使用HSV會比較方便。HSV把顏色分為色調(Hue)、飽和度(Saturation)、明度(Value)。

H是從0~179的值,代表不同色調、色相;S是0~255的值,0代表非常接近白色,255代表該顏色飽和度很高;V是0~255的值,0代表黑色,255代表接近純色。下面這張圖可以清楚表示HSV的概念。
https://ithelp.ithome.com.tw/upload/images/20240916/20168060QXRPFVFnS4.jpg

HSL

HSL與HSV類似,只是最後一個通道換成了亮度(Lightness),純色時亮度為50%。HSL常用於設計和圖形應用中,因為亮度更符合人類對顏色的感知,調整顏色的亮度更直觀。
https://ithelp.ithome.com.tw/upload/images/20240916/201680600fLkFUfagX.jpg

CMYK

CMYK(青色(Cyan)、品紅色(Magenta)、黃色(Yellow)、黑色(Key))顏色模式是一種減色模式,主要用於印刷領域。它基於吸收和減少光線的原理來創建顏色,適合在紙張等反射性介質上使用。

在影像處理上不常用CMYK顏色模式,openCV也沒有可以直接讀取到CMYK模式的函式,需要自己寫兩層迴圈手刻。

顏色轉換

針對常見的顏色模式,OpenCV有內建函式可以互相轉換。
cv2.cvtColor(圖片,色彩轉換模式)會回傳一個已經轉換好的圖片矩陣。

色彩轉換模式OpenCV提供了143種選擇,在官方文件中可以找到。第二個參數可以輸入阿伯數字代號,也可以打出大寫的英文名稱。

這裡提供一個小範例供大家練習RGB與HSV、HSL之間的轉換。

import cv2

# 讀取RGB圖片
image_rgb = cv2.imread('lenna.jpg')

# 轉換為HSV模式
image_hsv = cv2.cvtColor(image_rgb, cv2.COLOR_BGR2HSV)

# 轉換為HSL模式
image_hsl = cv2.cvtColor(image_rgb, cv2.COLOR_BGR2HLS)

# 顯示原圖和轉換後的圖片
cv2.imshow('Original Image', image_rgb)
cv2.imshow('HSV Image', image_hsv)
cv2.imshow('HSL Image', image_hsl)
cv2.waitKey(0)
cv2.destroyAllWindows()

結語

今天的分享就到這邊結束,希望大家有學到在電腦世界中顏色的分類方法以及操作方法。


上一篇
[Day 01] 認識OpenCV環境與讀取圖片
下一篇
[Day 03] 影像處理 - 強度變換 Intensity Transform
系列文
Python x OpenCV5
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言